package com.wasin.server.config;

import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @ 作者： wasin
 * @ 创建时间： 2021/9/15  18:12
 * @ 说明：    路由拦截鉴权
 * @ 当前版本:  1.0.0
 */
@Configuration
public class TokenConfigure implements WebMvcConfigurer {
    // 注册Sa-Token的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册注解拦截器，并排除不需要注解鉴权的接口地址 (与登录拦截器无关)
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
        // 注册路由拦截器，自定义验证规则
       /* registry.addInterceptor(new SaRouteInterceptor((req, res, handler)->{
            // 登录验证 -- 拦截所有路由，并排除/user/doLogin 用于开放登录 /sysUser/getList 排除
           // List<String> excludePatterns = Arrays.asList("/sysUser/doLogin", "/sysUser/getList");
           // SaRouter.match(Arrays.asList("/**"), excludePatterns, StpUtil::checkLogin);

            // 角色认证 -- 拦截以 admin 开头的路由，必须具备[admin]角色或者[super-admin]角色才可以通过认证
            //SaRouter.match("/admin/**", () -> StpUtil.checkRoleOr("admin", "super-admin"));


            // 匹配 restful 风格路由
            //SaRouter.match("/article/get/{id}", () -> StpUtil.checkPermission("article"));


            // 根据路由划分模块，不同模块不同鉴权
           *//* SaRouter.match("/user/**", () -> StpUtil.checkPermission("user"));
            SaRouter.match("/admin/**", () -> StpUtil.checkPermission("admin"));
            SaRouter.match("/goods/**", () -> StpUtil.checkPermission("goods"));
            SaRouter.match("/orders/**", () -> StpUtil.checkPermission("orders"));
            SaRouter.match("/notice/**", () -> StpUtil.checkPermission("notice"));
            SaRouter.match("/comment/**", () -> StpUtil.checkPermission("comment"));*//*
        })).addPathPatterns("/**");*/
    }
}
